home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 5817 / 5817.xpi / chrome / content / globals.js < prev    next >
Text File  |  2010-02-11  |  14KB  |  436 lines

  1. const Cc = Components.classes;
  2. const Ci = Components.interfaces;
  3. const Cu = Components.utils;
  4.  
  5. var SmGlobals = {
  6.   chromes: {
  7.     preferences: "chrome://sqlitemanager/content/preferences.xul",
  8.     console: "chrome://global/content/console.xul",
  9.     aboutconfig: "chrome://global/content/config.xul",
  10.     confirm: "chrome://sqlitemanager/content/confirm.xul",
  11.     aboutSM: "chrome://sqlitemanager/content/about.xul"
  12.   },
  13.  
  14.   webpages: {
  15.     home: "http://sqlite-manager.googlecode.com/",
  16.     faq: "http://code.google.com/p/sqlite-manager/wiki/FAQ",
  17.     issueNew: "http://code.google.com/p/sqlite-manager/issues/entry",
  18.     sqliteHome: "http://www.sqlite.org/",
  19.     sqliteLang: "http://www.sqlite.org/lang.html",
  20.     mpl: "http://www.mozilla.org/MPL/MPL-1.1.html"
  21.   },
  22.  
  23.   //these are the preferences which are being observed and which need to be initially read.
  24.   observedPrefs: ["jsonDataTreeStyle", "hideMainToolbar", "showMainToolbarDatabase", "showMainToolbarTable", "showMainToolbarIndex", "showMainToolbarDebug", "sqliteFileExtensions", "displayNumRecords", "textForBlob", "identifierQuoteChar", "jsonMruData", "notificationDuration",
  25.         "posInTargetApp" /* this one for firefox only*/,
  26.         "handleADS" /* this one for Windows only*/ ],
  27.  
  28.   tempNamePrefix: "__temp__",
  29.   sbPanelDisplay: null,
  30.  
  31.   appInfo: null,
  32.   extVersion: "",
  33.   extCreator: "",
  34.   extLocation: "",
  35.  
  36.   dialogFeatures: "chrome,resizable,centerscreen,modal,dialog",
  37.  
  38.   setAppInfo: function() {
  39.     var extId = "SQLiteManager@mrinalkant.blogspot.com";
  40.     this.appInfo = Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULAppInfo);
  41.  
  42.     this.gecko_1914pre = (Cc["@mozilla.org/xpcom/version-comparator;1"].getService(Ci.nsIVersionComparator).compare(this.appInfo.platformVersion, "1.9.1.4pre") >= 0);
  43.     this.gecko_193a1 = (Cc["@mozilla.org/xpcom/version-comparator;1"].getService(Ci.nsIVersionComparator).compare(this.appInfo.platformVersion, "1.9.3a1") >= 0);
  44.  
  45.     if (this.appInfo.ID == extId) {
  46.       this.extVersion = this.appInfo.version;
  47.       this.extCreator = this.appInfo.vendor;
  48.  
  49.       //TODO: why not resource:app instead of CurProcD?
  50.       this.extLocation = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties).get('CurProcD', Ci.nsIFile).path;
  51.     }
  52.     else {
  53.       var extInfo = Cc["@mozilla.org/extensions/manager;1"].getService(Ci.nsIExtensionManager).getItemForID(extId);
  54.       this.extVersion = extInfo.version;
  55.       this.extCreator = "Mrinal Kant";
  56.       this.extLocation = Cc["@mozilla.org/extensions/manager;1"].getService(Ci.nsIExtensionManager).getInstallLocation(extId).getItemFile(extId, '').path;
  57.     }
  58.   },
  59.  
  60.   //notification duration
  61.   getNotificationDuration: function() {
  62.     return sm_prefsBranch.getIntPref("notificationDuration") * 1000;
  63.   },
  64.  
  65.   // Remove all child elements 
  66.   $empty: function(el) {
  67.     while (el.firstChild) 
  68.       el.removeChild(el.firstChild);
  69.   },
  70.  
  71.   //cTimePrecision: Y, M, D, h, m, s
  72.   getISODateTimeFormat: function(dt, cSeparator, cPrecision) {
  73.     var aPrecision = ["Y", "M", "D", "h", "m", "s"];
  74.     var aSeparators = ["", "-", "-", "T", ":", ":"];
  75.     if (dt == null)
  76.       dt = new Date();
  77.  
  78.     var tt;
  79.     var iPrecision = aPrecision.indexOf(cPrecision);
  80.     var sDate = dt.getFullYear();
  81.     for (var i = 1; i <= iPrecision; i++) {
  82.       switch (i) {
  83.         case 1:
  84.           tt = new Number(dt.getMonth() + 1);
  85.           break;
  86.         case 2:
  87.           tt = new Number(dt.getDate());
  88.           break;
  89.         case 3:
  90.           tt = new Number(dt.getHours());
  91.           break;
  92.         case 4:
  93.           tt = new Number(dt.getMinutes());
  94.           break;
  95.         case 5:
  96.           tt = new Number(dt.getSeconds());
  97.           break;
  98.       }
  99.       var cSep = (cSeparator == null)?aSeparators[i]:cSeparator;
  100.       sDate += cSep + ((tt < 10)? "0" + tt.toString() : tt);
  101.     }
  102.     return sDate;
  103.   }
  104.  
  105. };
  106.  
  107. //constant for branch of nsIPrefService                 
  108. const sm_prefsBranch = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefService).getBranch("extensions.sqlitemanager.");
  109.  
  110. var gMktPreferences = {};
  111.  
  112. /* set unicode string value */
  113. function sm_setUnicodePref(prefName, prefValue) {
  114.     var sString = Cc["@mozilla.org/supports-string;1"].createInstance(Ci.nsISupportsString);
  115.     sString.data = prefValue;
  116.     sm_prefsBranch.setComplexValue(prefName, Ci.nsISupportsString, sString);
  117. }
  118.  
  119. SmGlobals.setAppInfo();
  120.  
  121. var smStrings = Cc["@mozilla.org/intl/stringbundle;1"].getService(Ci.nsIStringBundleService).createBundle("chrome://sqlitemanager/locale/strings.properties");
  122. //gets localized string
  123. function sm_getLStr(sName) {
  124.   return smStrings.GetStringFromName(sName);
  125. }
  126. //gets localized and formatted string
  127. function sm_getLFStr(sName, params, len) {
  128.   return smStrings.formatStringFromName(sName, params, params.length);
  129. }
  130.  
  131. var smPrompt =   Cc["@mozilla.org/embedcomp/prompt-service;1"].getService(Ci.nsIPromptService);
  132.  
  133. SmGlobals.allPrefs = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefBranch);
  134.  
  135. function $$(sId) {
  136.   return document.getElementById(sId);
  137. }
  138.  
  139. function smShow(aId) {
  140.   for (var i in aId) {
  141.     $$(aId[i]).hidden = false;
  142.   }
  143. }
  144.  
  145. function smHide(aId) {
  146.   for (var i in aId) {
  147.     $$(aId[i]).hidden = true;
  148.   }
  149. }
  150.  
  151. //adjust the rows of a multiline textbox according to content so that there is no scrollbar subject to the min/max constraints
  152. //tb = textbox element
  153. function adjustTextboxRows(tb, iMinRows, iMaxRows) {
  154.   tb.setAttribute('rows', iMinRows);
  155.   //subtract 10 so that there are no scrollbars even if all content is visible
  156.   while (tb.inputField.scrollHeight > tb.boxObject.height - 10) {
  157.     iMinRows++;
  158.     tb.setAttribute("rows", iMinRows);
  159.     if (iMinRows >= iMaxRows)
  160.       break;
  161.   }
  162. }
  163.  
  164. // PopulateDropDownItems: Populate a dropdown listbox with menuitems
  165. function PopulateDropDownItems(aItems, dropdown, sSelectedItemLabel) {   
  166.   dropdown.removeAllItems();
  167.   dropdown.selectedIndex = -1;
  168.  
  169.   for (var i = 0; i < aItems.length; i++) {
  170.      var bSelect = false;
  171.     if(i == 0)
  172.       bSelect = true;
  173.     
  174.     if (typeof aItems[i] == "string") {
  175.       if(aItems[i] == sSelectedItemLabel)
  176.         bSelect = true;
  177.     }
  178.     else {
  179.       if(aItems[i][0] == sSelectedItemLabel)
  180.         bSelect = true;
  181.     }
  182.     var menuitem = AddDropdownItem(aItems[i], dropdown, bSelect);
  183.   }
  184. }
  185.  
  186. // AddDropdownItem: Add a menuitem to the dropdown
  187. function AddDropdownItem(sLabel, dropdown, bSelect) {
  188.   var menuitem;
  189.   if (typeof sLabel == "string") {
  190.     menuitem = dropdown.appendItem(sLabel, sLabel);
  191.   }
  192.   else {
  193.     menuitem = dropdown.appendItem(sLabel[0], sLabel[1]);
  194.   }
  195.  
  196.   //make this item selected
  197.   if (bSelect)
  198.     dropdown.selectedItem = menuitem;
  199.  
  200.   return menuitem;
  201. }
  202.  
  203. function sm_notify(sBoxId, sMessage, sType, oExtra) {
  204.   var iTime = SmGlobals.getNotificationDuration();
  205.  
  206.   var notifyBox = $$(sBoxId);
  207.   var notification = notifyBox.appendNotification(sMessage);
  208.   notification.type = sType;
  209.   //notification.priority = notifyBox.PRIORITY_INFO_HIGH;
  210.   setTimeout('$$("'+sBoxId+'").removeAllNotifications(false);', iTime);
  211. }
  212.  
  213. //not yet called anywhere
  214. SmGlobals.launchHelp = function() {
  215.   var urlHelp = sm_getLStr("sm.url.help");
  216.   SmGlobals.openURL(urlHelp);
  217. };
  218.  
  219. SmGlobals.openURL = function(UrlToGoTo) {
  220.   var ios = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
  221.   var uri = ios.newURI(UrlToGoTo, null, null);
  222.   var protocolSvc = Cc["@mozilla.org/uriloader/external-protocol-service;1"].getService(Ci.nsIExternalProtocolService);
  223.  
  224.   if (!protocolSvc.isExposedProtocol(uri.scheme)) {
  225.     // If we're not a browser, use the external protocol service to load the URI.
  226.     protocolSvc.loadUrl(uri);
  227.     return;
  228.   }
  229.  
  230.   var navWindow;
  231.  
  232.   // Try to get the most recently used browser window
  233.   try {
  234.     var wm = Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator);
  235.     navWindow = wm.getMostRecentWindow("navigator:browser");
  236.   } catch(ex) {}
  237.  
  238.   if (navWindow) {  // Open the URL in most recently used browser window
  239.     if ("delayedOpenTab" in navWindow) {
  240.       navWindow.delayedOpenTab(UrlToGoTo);
  241.     } 
  242.     else if ("openNewTabWith" in navWindow) {
  243.       navWindow.openNewTabWith(UrlToGoTo);
  244.     } 
  245.     else if ("loadURI" in navWindow) {
  246.       navWindow.loadURI(UrlToGoTo);
  247.     }
  248.     else {
  249.       navWindow._content.location.href = UrlToGoTo;
  250.     }
  251.   }
  252.   else {
  253.     // If there is no recently used browser window then open new browser window with the URL
  254.     var ass = Cc["@mozilla.org/appshell/appShellService;1"].getService(Ci.nsIAppShellService);
  255.     var win = ass.hiddenDOMWindow;
  256.     win.openDialog(SmGlobals.getBrowserURL(), "", "chrome,all,dialog=no", UrlToGoTo );
  257.   }
  258. };
  259.  
  260. SmGlobals.getBrowserURL = function() {
  261.    // For SeaMonkey etc where the browser window is different.
  262.    try {
  263.       var url = SmGlobals.allPrefs.getCharPref("browser.chromeURL");
  264.       if (url)
  265.          return url;
  266.    } catch(e) {}
  267.    return "chrome://browser/content/browser.xul";
  268. };
  269.  
  270. SmGlobals.chooseDirectory = function(sTitle) {
  271.   const nsIFilePicker = Ci.nsIFilePicker;
  272.   var fp = Cc["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
  273.   fp.init(window, sTitle, nsIFilePicker.modeGetFolder);
  274.  
  275.   var rv = fp.show();
  276.  
  277.   //if chosen then
  278.   if (rv == nsIFilePicker.returnOK || rv == nsIFilePicker.returnReplace)
  279.     return fp.file;
  280.  
  281.   return null; 
  282. };
  283.  
  284. function sm_message(str, where) {
  285.   if(where & 0x1)
  286.     alert(str);
  287.   if(where & 0x2 && SmGlobals.sbPanelDisplay != null)
  288.     SmGlobals.sbPanelDisplay.label= str;;
  289.   if(where & 0x4)
  290.     sm_log(str);
  291. }
  292.  
  293. function sm_confirm(sTitle, sMessage) {
  294.   var aRetVals = {};
  295.   var oWin = window.openDialog(SmGlobals.chromes.confirm, "confirmDialog", SmGlobals.dialogFeatures, sTitle, sMessage, aRetVals, "confirm");
  296.   return aRetVals.bConfirm;
  297. }
  298.  
  299. function sm_alert(sTitle, sMessage) {
  300.   var aRetVals = {};
  301.   var oWin = window.openDialog(SmGlobals.chromes.confirm, "alertDialog", SmGlobals.dialogFeatures, sTitle, sMessage, aRetVals, "alert");
  302. }
  303.  
  304. function sm_log(sMsg) {
  305.   var aConsoleService = Cc["@mozilla.org/consoleservice;1"].getService(Ci.nsIConsoleService);
  306.  
  307.   aConsoleService.logStringMessage("SQLiteManager: " + sMsg);
  308. }
  309.  
  310. SmGlobals.confirmBeforeExecuting = function(aQ, sMessage, confirmPrefName) {
  311.   if (confirmPrefName == undefined)
  312.     confirmPrefName = "confirm.otherSql";
  313.   var bConfirm = sm_prefsBranch.getBoolPref(confirmPrefName);
  314.  
  315.   var answer = true;
  316.   var ask = sm_getLStr("globals.confirm.msg");
  317.   //in case confirmation is needed, reassign value to answer
  318.   if (bConfirm) {
  319.     var txt = ask + "\n" + sMessage + "\nSQL:\n" + aQ.join("\n");
  320.     if (typeof sMessage == "object" && !sMessage[1]) {
  321.       txt = ask + "\n" + sMessage[0];
  322.     }
  323.     answer = sm_confirm(sm_getLStr("globals.confirm.title"), txt);
  324.   }
  325.  
  326.   return answer;
  327. };
  328.  
  329. ////////////////////////////////////////////////
  330. //called on load of preferences.xul
  331. function sm_setCurrentSettings() {
  332.   sm_setDataTreeStyleControls();
  333. }
  334.  
  335. ///////////////////////////////////////////////
  336. function sm_setDataTreeStyle(sType) {
  337.   if (sType == "none") {
  338.     var sPref = sm_prefsBranch.getCharPref("jsonDataTreeStyle");
  339.     var obj = JSON.parse(sPref);
  340.     obj.setting = 'none';
  341.     sPref = JSON.stringify(obj);
  342.     sm_prefsBranch.setCharPref("jsonDataTreeStyle", sPref);
  343.     return;
  344.   }
  345.   if (sType == "default") {
  346.     sm_prefsBranch.clearUserPref("jsonDataTreeStyle");
  347.     sm_setDataTreeStyleControls();
  348.     return;
  349.   }
  350.   if (sType == "user") {
  351.     var sPref = setMktPreferences('datatree-options');
  352.     sm_prefsBranch.setCharPref("jsonDataTreeStyle", sPref);
  353.     return;
  354.   }
  355. }
  356.  
  357. function sm_setDataTreeStyleControls() {
  358.   var oStyle = sm_prefsBranch.getCharPref("jsonDataTreeStyle");
  359.   var obj = JSON.parse(oStyle);
  360.   if (obj.setting == 'none') {
  361.     $$('btnTreeStyleApply').setAttribute('disabled', true);
  362.   }
  363.   else {
  364.     $$('btnTreeStyleApply').removeAttribute('disabled');
  365.   }
  366.  
  367.   gMktPreferences.dataTreeStyle = obj;
  368.   applyMktPreferences('datatree-options');
  369. }
  370.  
  371. //this function applies mktpreferences to descendants of element whose id=sId and which have the attribute 'mktpref'
  372. function applyMktPreferences(sId) {
  373.   var pElt = $$(sId);
  374.   var aElt = pElt.querySelectorAll("[mktpref]");
  375.   for (var i = 0; i < aElt.length; i++) {
  376.     var mktpref = aElt[i].getAttribute('mktpref');
  377.     var val = getMktPref(mktpref);
  378. //    if (val == null)
  379. //      continue;
  380.     switch (aElt[i].localName.toLowerCase()) {
  381.       case 'colorpicker':
  382.         if (val == null)
  383.           aElt[i].color = '';
  384.         else
  385.           aElt[i].color = val;
  386.         break;
  387.       default:
  388.         aElt[i].value = val;
  389.         break;
  390.     }
  391.   }
  392. }
  393.  
  394. function setMktPreferences(sId) {
  395.   var pElt = $$(sId);
  396.   var aElt = pElt.querySelectorAll("[mktpref]");
  397.   for (var i = 0; i < aElt.length; i++) {
  398.     var mktpref = aElt[i].getAttribute('mktpref');
  399.     var val = "";
  400.     switch (aElt[i].localName.toLowerCase()) {
  401.       case 'colorpicker':
  402.         val = aElt[i].color;
  403.         break;
  404.       default:
  405.         val = aElt[i].value;
  406.         break;
  407.     }
  408.     setMktPref(mktpref, val);
  409.   }
  410.   return JSON.stringify(gMktPreferences.dataTreeStyle);
  411. }
  412.  
  413. function setMktPref(str, val) {
  414.   var o = gMktPreferences;
  415.   var parts = str.split('.');
  416.   var len = parts.length;
  417.   for (var i = 0; i < len - 1; i++) {
  418.     o = o[parts[i]] = o[parts[i]] || {};
  419.   }
  420.   o[parts[i]] = val;
  421.   return o;
  422. }
  423.  
  424. function getMktPref(str) {
  425.   var o = gMktPreferences;
  426.   var parts = str.split('.');
  427.   var len = parts.length;
  428.   for (var i = 0; i < len; i++) {
  429.     if (o[parts[i]])
  430.       o = o[parts[i]];
  431.     else
  432.       return null;
  433.   }
  434.   return o;
  435. }
  436.